<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Ресурсы</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.75.1">
<link rel="home" href="index.html" title="Руководство по Smarty">
<link rel="up" href="plugins.html" title="Chapter 16. Плагины - расширение функциональности Smarty">
<link rel="prev" href="plugins.outputfilters.html" title="Фильтры вывода">
<link rel="next" href="plugins.inserts.html" title="Вставки">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="navheader">
<table width="100%" summary="Navigation header">
<tr><th colspan="3" align="center">Ресурсы</th></tr>
<tr>
<td width="20%" align="left">
<a accesskey="p" href="plugins.outputfilters.html">Prev</a> </td>
<th width="60%" align="center">Chapter 16. Плагины - расширение функциональности Smarty</th>
<td width="20%" align="right"> <a accesskey="n" href="plugins.inserts.html">Next</a>
</td>
</tr>
</table>
<hr>
</div>
<div class="sect1" title="Ресурсы">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="plugins.resources"></a>Ресурсы</h2></div></div></div>
<p>
  Плагины ресурсов описывают источники данных, из которых берется исходный
  код шаблона или компоненты PHP-скрипта для Smarty. Вот примеры ресурсов:
  базы данных, LDAP, разделяемая память (shared memory), сокеты, и прочее.
 </p>
<p>
  Необходимо 4 функции для того, чтобы зарегестрировать
  каждый тип ресурса. Каждая такая функция получает запрашиваемый ресурс в качестве
  первого параметра и объект Smarty как последний параметр.
  Остальные параметры зависят от функции.
 </p>
<div class="funcsynopsis">
<table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table">
<tr>
<td><code class="funcdef">bool <b class="fsfunc">smarty_resource_name_source</b>(</code></td>
<td>
<var class="pdparam">$rsrc_name</var>, </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td>
<var class="pdparam">&amp;$source</var>, </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td>
<var class="pdparam">&amp;$smarty</var><code>)</code>;</td>
<td> </td>
</tr>
</table>
<div class="paramdef-list">
<code>string <var class="pdparam">$rsrc_name</var></code>;<br><code>string <var class="pdparam">&amp;$source</var></code>;<br><code>object <var class="pdparam">&amp;$smarty</var></code>;</div>
<div class="funcprototype-spacer"> </div>
<table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table">
<tr>
<td><code class="funcdef">bool <b class="fsfunc">smarty_resource_name_timestamp</b>(</code></td>
<td>
<var class="pdparam">$rsrc_name</var>, </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td>
<var class="pdparam">&amp;$timestamp</var>, </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td>
<var class="pdparam">&amp;$smarty</var><code>)</code>;</td>
<td> </td>
</tr>
</table>
<div class="paramdef-list">
<code>string <var class="pdparam">$rsrc_name</var></code>;<br><code>int <var class="pdparam">&amp;$timestamp</var></code>;<br><code>object <var class="pdparam">&amp;$smarty</var></code>;</div>
<div class="funcprototype-spacer"> </div>
<table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table">
<tr>
<td><code class="funcdef">bool <b class="fsfunc">smarty_resource_name_secure</b>(</code></td>
<td>
<var class="pdparam">$rsrc_name</var>, </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td>
<var class="pdparam">&amp;$smarty</var><code>)</code>;</td>
<td> </td>
</tr>
</table>
<div class="paramdef-list">
<code>string <var class="pdparam">$rsrc_name</var></code>;<br><code>object <var class="pdparam">&amp;$smarty</var></code>;</div>
<div class="funcprototype-spacer"> </div>
<table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table">
<tr>
<td><code class="funcdef">bool <b class="fsfunc">smarty_resource_name_trusted</b>(</code></td>
<td>
<var class="pdparam">$rsrc_name</var>, </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td>
<var class="pdparam">&amp;$smarty</var><code>)</code>;</td>
<td> </td>
</tr>
</table>
<div class="paramdef-list">
<code>string <var class="pdparam">$rsrc_name</var></code>;<br><code>object <var class="pdparam">&amp;$smarty</var></code>;</div>
<div class="funcprototype-spacer"> </div>
</div>
<p>
  Первая функция получает ресурс. Ее первый
  параметр, это переменная, переданная по ссылке. В нее будет сохранен результат.
  Функция вернет <code class="literal">true</code> если
  сможет удачно получить ресурс и
  <code class="literal">false</code> в ином случае.
 </p>
<p>
  Вторая функция получает время последней модификации
  запрошенного ресурса (в виде UNIX timestamp). Второй параметр
  представляет собой переменную, переданную по ссылке, в которой и будет сохранено время.
  Функция вернет <code class="literal">true</code> если
  timestamp будет определен в правильной форме, и <code class="literal">false</code>
  в ином случае.
 </p>
<p>
  Третья функция возвращает <code class="literal">true</code> или
  <code class="literal">false</code> в зависимости от того, является ли
  запрашиваемый ресурс безопасным. Эта функция используется только для ресурсов шаблона, но
  в любом случае должна быть определена.
 </p>
<p>
  Четвертая функция возвращает <code class="literal">true</code> или
  <code class="literal">false</code> в зависимости от того, заслуживает ли запрашиваемый ресурс доверия
  (is trusted) или нет. Эта функция используется только для компонентов PHP-скрипта,
  запрошенных тэгом <span class="command"><strong>include_php</strong></span> или
  <span class="command"><strong>insert</strong></span> с <em class="structfield"><code>src</code></em>
  атрибутом. Тем не менее, она должна объявляться даже для ресурсов шаблона.
 </p>
<p>
  Смотрите также:
  <a class="link" href="api.register.resource.html" title="register_resource">register_resource()</a>,
  <a class="link" href="api.unregister.resource.html" title="unregister_resource">unregister_resource()</a>.
 </p>
<div class="example">
<a name="id2743021"></a><p class="title"><b>Example 16.10. Плагин ресурса</b></p>
<div class="example-contents"><pre class="programlisting">

&lt;?php
/*
 * Smarty plugin
 * -------------------------------------------------------------
 * Файл:     resource.db.php
 * Тип:     resource
 * Имя:     db
 * Назначение:  Получает шаблон из базы данных
 * -------------------------------------------------------------
 */
 function smarty_resource_db_source($tpl_name, &amp;$tpl_source, &amp;$smarty)
{
    // выполняем обращение к базе данных для получения шаблона
    // и занесения полученного результата в в $tpl_source
    $sql = new SQL;
    $sql-&gt;query("select tpl_source
                   from my_table
                  where tpl_name='$tpl_name'");
    if ($sql-&gt;num_rows) {
        $tpl_source = $sql-&gt;record['tpl_source'];
        return true;
    } else {
        return false;
    }
}

function smarty_resource_db_timestamp($tpl_name, &amp;$tpl_timestamp, &amp;$smarty)
{
    // выполняем обращение к базе данных для присвоения значения $tpl_timestamp.
    $sql = new SQL;
    $sql-&gt;query("select tpl_timestamp
                   from my_table
                  where tpl_name='$tpl_name'");
    if ($sql-&gt;num_rows) {
        $tpl_timestamp = $sql-&gt;record['tpl_timestamp'];
        return true;
    } else {
        return false;
    }
}

function smarty_resource_db_secure($tpl_name, &amp;$smarty)
{
    // предполагаем, что шаблоны безопасны
    return true;
}

function smarty_resource_db_trusted($tpl_name, &amp;$smarty)
{
    // не используется для шаблонов
}
?&gt;

  </pre></div>
</div>
<br class="example-break">
</div>
<div class="navfooter">
<hr>
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left">
<a accesskey="p" href="plugins.outputfilters.html">Prev</a> </td>
<td width="20%" align="center"><a accesskey="u" href="plugins.html">Up</a></td>
<td width="40%" align="right"> <a accesskey="n" href="plugins.inserts.html">Next</a>
</td>
</tr>
<tr>
<td width="40%" align="left" valign="top">Фильтры вывода </td>
<td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td>
<td width="40%" align="right" valign="top"> Вставки</td>
</tr>
</table>
</div>
</body>
</html>
